The Navstar Global Positioning System ("GPS") is a satellite-based radio navigation system that allows a user to accurately determine its three-dimensional position, velovity and acceleration vectors on the Earth's surface, in addition to measuring precise time of such measurements. GPS consists of three separate parts or segments. The Control Segment monitors and controls the satellites and is responsible for uploading the satellite messages. The Space Segment consists of the satellites themselves. When GPS achieves full operational status, the Space Segment will include 21 satellites in 6 orbital planes, plus 3 spare satellites (also orbiting) designed to maximize satellite-to-user visibility. The User Segment consists of a GPS receiver and any applications for which the GPS receiver may be used.
The satellites transmit to the User segment using two carrier signal frequencies, centered at 1575.42 MHz (L1 carrier) and at 1227.6 MHz (L2 carrier). Both the L1 and L2 carrier signal frequencies carry binary phase shift keying ("BPSK") modulation, which is discussed in W. Tomasi, Electronic Communication Systems, Prentice-Hall, 1988, pp. 496-502. The L1 carrier signal is modulated by the P code and by the C/A code. The L2 carrier signal is modulated by the P code only. The C/A code is clocked at 1.023 MHz and its sequence repeats every 1023 chips, giving the C/A code a period of 1 msec. The P code is clocked at 10.23 MHz and has a code period of precisely 1 week (7.000 days). By assigning different C/A and P code sequences to different satellites, the user can select a particular satellite signal by using the codes associated with that satellite vehicle's Pseudo Random Number Code ("PRN").
A code-correlating receiver generates a replica of the code transmitted by the satellite. This is used to strip off the BPSK modulation and leave the original carrier signal plus navigation data. The phase of the local PRN code signal allows a measurement of the satellite Pseudo Range, which is defined as the measured range to a satellite, uncorrected for synchronization errors between the receiver and satellite clocks. The C/A code receivers use the L1 signal only, but receivers that are capable of P code operation can use both the L1 and the L2 signals. This allows the P code receivers to measure and apply a dual frequency correction to delays induced by the ionosphere, in a manner disclosed by MacDoran in U.S. Pat. No. 4,463,357.
Counselman, in U.S. Pat. No. 4,870,422, discloses method and apparatus for a Global Positioning System that uses double sideband, suppressed carrier signals and relies on in-phase and quadrature output signals from one or more local oscillators to determine position relative to two or more satellites. This approach appears to contemplate only a conventional approach to P code generation and sensing. Ashjaee et al also disclose use of local oscillators and frequency-shifted signals for global position determination, in U.S. Pat. No. 4,928,106. Kuroda et al, in U.S. Pat. No. 4,928,107, disclose a Global Positioning System involving iterative determination of global position from receipt of GPS signals from a plurality of satellites.
The conventional method of producing the C/A and P code sequences is given in the Interface Control Document, ICD-GPS-200, Rockwell International Corp., Satellite Systems Division, Revision A, Sep. 26, 1984, incorporated herein by reference. The P code circuit consists of two codes, called the X1 code and the X2 code. The satellite PRN selection is performed by delaying the X2 code relative to the X1 code by one or more chips. Delays of 1 to 37 chips are defined, which allows generation of code sequences 1 through 37. The X1 code consists of 15,345,000 chips which, when clocked at 10.23 MHz, has a repetition period of precisely .DELTA.t=1.5 seconds. The boundary between the last X1 code chip and the first X1 code chip of the following cycle is called an X1 epoch. The X2 code sequence consists of 15,345,037 chips, making it 37 chips longer than the X1 code sequence. This allows the X1 code to precess relative to the X2 code by 37 chips every 1.5 seconds.
Each of the X1 and X2 codes is produced by an Exclusive OR ("EX-OR") operation applied to two shorter length code sequences. The X1 code results from EX-ORing X1A code and X1B code. The X2 is made from EX-ORing an X2A code and an X2B code. The X1A, X1B, X2A and X2B codes are short cycled, maximal length PRN sequences that are generated using four 12-bit shift registers. The X1A and X2A code sequences are 4092 chips long and the X1B and X2B sequences are 4093 chips long. The short cycling of the PRN registers is performed by detecting the final state in the register sequence and initializing the register with the first state in the sequence. The transistion from final state to first state is termed the PRN code epoch.
Mathematically, this is represented as follows: EQU P(t;n)=X1(t).sym.X2(t-nT) (n=1,2, . . . , 37), (1) EQU X1(t)=X1A(t).sym.X1B(t), (2) EQU X2(t)=X2A(t).sym.X2B(t). (3) EQU T=(10.23 MHz).sup.-1 =97.752 nsec, (4) EQU CA(t; n)=G1(t).sym.G2(t; n), (5)
where P(t; n) represents the P code bit position amplitude as a function of time t for satellite no.n, CA(t; n) represents the C/A code bit position amplitude for satellite no.n, G1(t) and G2(t; n) are Gold Code sequences, with G2(t; n) time delayed by an amount .DELTA.t.sub.n relative to G1(t), and X1(t), X2(t), X1A(t), X1B(t), X2A(t) and X2B(t) have similar interpretations. Each of the X1A, X1B, X2A and X2B codes is generated by a 12-bit shift register with selective feed-through, and the associated feed-through polynomials P(X; x) (X=X1A, X1B, X2A and X2B are given by: EQU P(X1A; x)=1+x.sup.6 +x.sup.8 +x.sup.11 +x.sup.12, (6) EQU P(X1B; x)=1+x+x.sup.2 +x.sup.5 +x.sup.8 +x.sup.9 +x.sup.10 +x.sup.11 +x.sup.12, (7) EQU P(X2A; x)=1+x+x.sup.3 +x.sup.4 +x.sup.5 +x.sup.7 +x.sup.8 +x.sup.9 +x.sup.10 +x.sup.11 +x.sup.12, (8) EQU P(X2B; x)=1+x.sup.2 +x.sup.3 +x.sup.4 +x.sup.8 +x.sup.9 +x.sup.12.(9)
The 12-bit register configuration for generating P(X1A; x) is illustrated in FIG. 1, and the register configurations for the other three feed-through polynomials are similar. The initial values of the 12-bit X1A, X1B, X2A and X2B codes, to which the respective codes are reset at the beginning of each week, are EQU X1A(t=0)=001001001000, (10) EQU X1B(t=0)=010101010100, (11) EQU X2A(t=0)=100100100101, (12) EQU X2B(t=0)=010101010100. (13)
Each of the 12-bit PRN registers is paired with a state decoder and epoch counter, as illustrated in FIG. 2. Each of the X1A and X2A PRN generators has a divide-by-3750 counter paired with it, and each of the X1B and X2B PRN generators has a divide-by-3749 counter paired with it. Unlike the X1A register, which is clocked continuously, the X1B, X2A and X2B registers can be stopped and restarted upon receipt of "halt counting" and "resume counting" signals, respectively. The halt conditions occur in the following manner. (1) After initialization, the X1B register, decoder and counter operate normally until they reach their final states. This occurs 343 chips before the next X1A epoch; the X1B circuitry is held in this final state until the next X1A epoch occurs, when normal operation is resumed. (2) The X2B register, decoder and counter operate normally until these devices reach their respective final states, after which the contents of these devices are held for 343 chips relative to the X2A register, decoder and counter in a similar manner. However, when the next X2A epoch occurs, both the X2A and X2B devices are held in their respective final states for an additional 37 chips. This allows the X1 code to precess relative to the X2 code by 37 chips within each X1 period. Implementation of the ICD-GPS-200 specification requires a divide-by-37 counter to time this 37-chip delay. (3) During the last 400 .mu.sec before the end of the week, the X2A and X2B registers are clocked normally until they reach their final states, where they are held until the first X1A epoch of the next week begins. All PRN registers and counters are reset to their initial states when the new week begins, and the X1A and X1B circuits operate normally across this time point.
FIG. 2 illustrates conventional apparatus 11 for generation of the P code. The apparatus is driven by receipt, on a clock signal line 14, of a sequence of clock pulse signals produced by a 10.23 MHz clock pulse source 12 that can be enabled by the C/A code epoch signal from the C/A module 10. A 12-bit X1A register 21, with associated feed-through polynomial module 23, receives the clock pulse sequence directly and generates a 12-bit register state with a chosen bit position that has an associated code sequence X1A(t) for each of a sequence of times t=mT (m=0, 1, 2, . . . , M). The X1A code cycles through 4092 chips in a single X1A period. The X1 period has length .DELTA.t=1.5 sec=(15,345,000 chips)/(10.23 MHz). Each state is monitored by an X1A cycle decoder 25 that issues an X1A epoch signal each time the chip number reaches 4092. The X1A epoch signal resets the X1A PRN signal to its initial value. This output signal from the decoder 25 is received by a divide-by-3750 X1A counter 27 that issues a predetermined divider output signal when the X1A epoch count reaches 3750. The output signal from the X1A counter 27 is received by one of two input terminals of an AND gate 29. The other input terminal of the AND gate 29 receives the output signal from the decoder 25. When the two input signals for the AND gate 29 are both high, which occurs only at the end of each X1 period, the output signal of the AND gate 29 goes high and an X1 epoch output signal is issued. The X1 epoch signal issued by the AND gate 29 is received by a first input terminal (the "resume counting" terminal) of a clock control module 13 that receives and passes clock pulses to a register 31. The clock control module 13 is enabled by receipt of a high signal at its "resume counting" input terminal, which allows a sequence of clock pulses received at a clock input terminal to be passed through as an output signal, if the clock control module 13 is presently disabled. The clock control module 13 is disabled by receipt of a high signal at its "halt counting" input terminal. Receipt of the "halt counting" signal terminates pass-through of the clock pulse sequence received by the clock control module 13 until the next "resume counting" signal is received.
A 12-bit X1B register 31 and associated feed-through polynomial module 33 generates a 12-bit register state with a chosen bit position that has an associated code sequence X1B(t) for each of a sequence of times t=mT (m=0, 1, 2, . . . , M). As each new X1B code sequence is generated, the sequence is monitored by an X1B cycle decoder 35 that operates analogously to the X1A cycle decoder 25, except that the X1B cycle decoder 35 issues an X1B epoch output signal after 4093 chips. The X1B epoch output signal from the X1B cycle decoder 35 is received by a divide-by-3749 X1B epoch counter 37 that operates in a manner similar to the divide-by-3750 counter 27. The output signals from the X1B cycle decoder 35 and from the divide-by-3749 X1B epoch counter 37 are received by two input terminals of an AND gate 39 that issues a high output signal, once every (4093).times.(3749)=15,344,657 chips. This high output signal from the AND gate 39 is received by a second input terminal (the "halt counting" terminal) of the clock control module 13 and disables this clock control module so that no further clock signal is received by the X1B register 31.
Receipt of a high input signal at the "halt counting" terminal of the clock control module 13 causes this module to suppress pass-through of the clock pulse sequence output that would otherwise be issued at its output terminal, as discussed above. Receipt of the "halt counting" signal by the clock control module 13 freezes the code output signal received from the X1B register by the decoder 35 at the value X1B(t=[15,345,000-343]T) until the time t=15,345,000 T, at which point the X1A and X1B code sequence developments continue without re-initialization. Re-enablement of the clock control module 13 occurs when this clock control module receives a "resume counting" signal from the AND gate 29 at a second input terminal of the clock control module 13, and this occurs at the end of each X1 period, as described above (.DELTA.t=1.5 sec).
The X2A register 41 and the X2B register 51 behave analogously to the X1A register 21 and the X1B register 31, respectively. The X2A register 41 is a 12-bit register with associated feed-through polynomial module 43 that together generate a 12-bit register state with a chosen bit position that has an associated code sequence X2A(t). As the code sequence X2A(t) is generated, the X2A register 41 cycles through 4092 chips a total of 3750 times in an X2 period of length .DELTA.t=1.5 sec. The output state from the X2A register 41 is passed through a 4092-chip decoder 45, which produces an X2A epoch output signal, and then through a divide-by-3750 counter 47. The output signal from the counter 47 is received by one of two input terminals of an OR gate 48, whose second input terminal receives an EOW signal indicating when the end of a week or other designated overall period has occurred. If either of these two input signals for the OR gate 48 is high, the OR gate output signal will be high. The output signal from the OR gate 48 is received by one of two input terminals of an AND gate 49, whose second input terminal receives the output signal from the X2A epoch decoder module 45. The output signal from the AND gate 49 is high only when: (1) the end of a 4092-chip cycle is reached; and (2a) the end of an X2A period is reached (.DELTA.t=1.5 sec) or (2b) an end-of-week signal EOW is received. Receipt of a high output signal from the AND gate 49 at a "halt counting" terminal of a second clock control module 15 commands this module to halt its clock pulse pass-through operation, until a "resume counting" signal is received on a control line 16 at a "resume counting" terminal of the module 15. The "resume counting" signal commands resumption of pass through by the clock control module 15 of clock pulses received from the clock pulse source 12.
In a similar manner, an X2B register 51, an associated feed-through polynomial module 53, a 4093-state decoder 55, a divide-by-3749 X2B epoch counter 57, a two-input terminal OR gate 58 and a two-input terminal AND gate 59 generate the 3749.times.4093=15,344,657 chips of the X2B code. The OR gate 58 receives the EOW signal and an output signal from the X2B epoch counter 57 at its two input terminals. The AND gate 59 receives the output signal from the 4093-chip decoder 55 and the output signal from the OR gate 58 at its two input terminals. The output signal from the AND gate 59 is received by a "halt counting" input terminal of a third clock control module 17 and halts the clock pulse pass-through operations of the clock control module 17 when: (1) the end of a 4093-chip period is reached in the X2B register 51; and either (2a) the end of an X2B period is reached or (2b) an EOW signal is received. The clock control module 17 resumes its clock pulse pass-through operations when this module receives a "resume counting" signal on control line 16.
A divide-by-403,200 counter 61, sometimes referred to as an seven-day or Z counter, receives the X1 epoch signals from the AND gate 29 and issues a high output signal (EOW) after receipt of 403,199 consecutive X1 epoch signals, indicating the start of the last X1 period of the current week. The end of the week occurs one X1 period later, after the counter 61 has received 403,200 consecutive X1 epoch signals. The X1 epoch signals are spaced .DELTA.t=1.5 sec apart so that the total time interval is 604,800 sec=7.000 days in the configuration shown here. This total time interval may be any convenient interval of reasonable length. The output signals from the seven-day counter 61 and from the AND gate 29 are received by a seven-day reset module 63, which issues an end of week signal EOW as an output signal on a first output signal line 64 when the last X1 period of the current week has begun and issues a start-of-week signal SOW on a second output signal line 66 when a new week begins. The EOW signal is received by the OR gates 48 and 58, as noted above.
The SOW signal is received by one of two input terminals of an OR gate 69 on the signal line 66 from the seven-day reset module 63. An AND gate 65 receives the output signals from the 4092-chip decoder 45 and from the X2A epoch divider module 47 and periodically issues an X2 epoch output signal, indicating that the end of an X2 period has been reached. The output signal from the AND gate 65 enables a divide-by-37 counter 67 that, in its enabled state, receives and counts clock pulse input signals from the clock pulse source 12 that drives the apparatus 11. After count 37 is reached by the enabled counter 67, this counter issues a high output signal that is received by a second input terminal of the OR gate 69. The OR gate 69 thus issues a high output signal whenever (1) the gate receives an SOW signal or (2) the gate receives a high signal from the divide-by-37 counter 67, 37 chips beyond the end of the current X2 period. The output signal from the OR gate 69 is received by the control line 16, which delivers a "resume counting" signal to each of the clock control modules 15 and 17 and causes these clock control modules to resume pass-through operations of the clock pulses received on the signal line 14 from the clock pulse source 12. The result of a temporary halt, for 37 chips, in clock pulse pass-through operations for the X2A and X2B registers is that the X1A and X1B registers precess by 37 chips relative to the X2A and X2B registers at the end of each X1 period (.DELTA.t=1.5 sec).
The code sequences X1A(t) and X1B(t) issued by the registers 21 and 31 are received at two input terminals of an EX-OR gate 71, whose output signal X1A(t) .sym. X1B(t)=X1(t) is received by one of two input terminals of an EX-OR gate 73. The code sequences X2A(t) and X2B(t) issued by the registers 41 and 51 are received at two input terminals of a third EX-OR gate 75. The output signal X2A(t) .sym. X2B(t)=X2(t) from the EX-OR gate 75 is received by a 37-place shift register 77 that has 37 output terminals, one such output terminal corresponding to each of the time delays .DELTA.t.sub.d =nT (n=1, 2, . . . , 37). An operator-controllable 6-bit latch and multiplexer 79 determines which of the 37 time delays .DELTA.t.sub.d =nT is used to form the time sequence X2(t-.DELTA.t.sub.d) that issus as an output signal from the latch/multiplexer 79. This output signal is received by a second input terminal of the EX-OR gate 73, which issues the desired output signal X1(t) .sym. X2(t-.DELTA.t.sub.d) that is the characteristic code for one satellite vehicle.
The apparatus shown in FIG. 2 can be modified but is representative of the complexity of the conventional approach to P code generation. The arrangement of a large number of registers, decoders, counters and logic gates seriatim builds in a considerable time delay, because of the accumulated gate delays and other device delays of such arrangements. Further, use of so many components reduces the reliability of the apparatus and the mean-time-to-failure. What is needed is simpler apparatus that produces the same P code with fewer serial components and with increased reliability.